<?php
namespace Index\Controller;
use Think\Controller; //命名空间
class IndexController extends CommonController {
	//所有问题展示页面
    public function indexAction($where='',$count=null){
        // var_dump($_SESSION);
        //思路：多条问题展示页面，循环数据，得到对应的数据值，比如回答者名字，回答时间，问题所属分类，回答数量等等，用sql语句从数据库里取数据，在前端页面对应位置混编php展示数据
        //$where=''是一个查询条件，默认为空，为空的时候什么都没有，不影响查询结果，不为空的时候，下面的hot和unanswer方法里的sql语句有用到，使用前面的sql语句，连上$where=''，再连上别的条件进行查询，精简代码
    	//$count=null是分页里使用的，默认的分页显示的是所有的问题，点击分类里显示的分页是某个分类的问题数，并不等于数据库里所有的问题数，所以用$count统计问题数量，用三元表达式来写，当要显示所有问题时，显示所有问题，要显示分类问题时，显示分类里的问题数量
    	// 取问题表里的id数量，也就是统计所有的问题数量
    	$sql = "select count(id) count from question";
    	// $count = M()->query($sql);
    	// $count = current($count);
    	// var_dump($count);exit;
    	// 三元表达式，如果$count是空的那么求取当前数据库里的问题数量展示，如果不是空的，选取了对应分类，那么就$count就是取对应分类里的问题数量展示，比如未回答分类，就展示未回答的问题条数，而不是总的问题条数
    	$count = is_null($count) ? current(M()->query($sql))['count'] : $count;

    	$Page  = new \Think\Page($count,3);// 实例化分页类 (TP框架封装好的类)传入总记录数和每页显示的记录数
		$show  = $Page->show();// 分页显示输出
		// 取回答表里所有信息和回答者名字,.$where.这里的$where是连上的条件，为空时不影响查询结果，limit {$Page->firstRow},{$Page->listRows}进行分页数据查询
        //如果$where是空的，那么就按创建时间排序
        if (empty($where)) {
            $where = "order by create_time desc ";
        }

        $sql = "select t1.*,t2.username from question t1 left join user t2 on t1 .uid=t2.id ".$where." limit {$Page->firstRow},{$Page->listRows}";
        $questions = M()->query($sql);
        // var_dump($questions);
        
     	//echo $show;
    	//echo $sql;  //打印出的sql语句结果显示$Page->firstRow为0，$Page->listRows为3（每页显示的问题条数），
    	//exit;

        //$v就是$questions里的所有值，有问题id，状态，问题标题，问题内容等等，{$v['id']}是问题id，&是传址符，将结果通过传址带参的方式传到显示页面
        foreach ($questions as &$v) {
        	if ($v['answer_num']>0) {
        		$sql = "select t2.username,t1.create_time from answer t1 left join user t2 on t1.uid=t2.id where qid={$v['id']} order by create_time desc     limit 1";
        		// var_dump($sql);
        		//查询回答者用户名和回答问题的时间用于展示，查询到的结果是一个二维数组，用current取数组当前项
        		$res = M()->query($sql);

        		$row = current($res);
        		
        		$v['username'] = $row['username'];

        		$v['create_time'] = $row['create_time'];         		
        	}

        	$sql = "select t1.cid,t2.cname from category_question t1 left join category t2 on t1.cid=t2.id where t1.qid={$v['id']}";

        	$v['category'] = M()->query($sql);

        	$v['create_time'] = Ftime(date('Y-m-d H:i:s',$v['create_time']));

        	// var_dump($v['category']);       	

        }
        //分配变量
        $this->assign('show',$show);
        $this->assign('questions',$questions);
        // 指定模板，display方法会去找对应名称控制器的模板，如果要指定用其他模板，就传参，下面的热门hot和未回答unanwer，我们并没有写相应模板，仍然是跳回当前页面的hot方法和unanswer方法，如果不指定跳回当前页面，它会自动去找hot模板和unanswer模板，找不到就会报错，所以指定他跳回当前模板$this->display('index/index');
        $this->display('index/index');       
    }
    // 热门问题展示页面，按浏览量分类
    public function hotAction(){
        // var_dump($_SESSION);
        $this->indexAction('order by view desc');
        // echo $sql;
        //调用indexAction方法，'order by view desc'就是方法中传的参数，也就是$where='order by view desc'，那么$sql = "select t1.*,t2.username from question t1 left join user t2 on t1 .uid=t2.id ".$where."limit {$Page->firstRow},{$Page->listRows}";也就是$sql = "select t1.*,t2.username from question t1 left join user t2 on t1 .uid=t2.id order by view desc limit {$Page->firstRow},{$Page->listRows}";
        
    }
    // 未回答问题展示页面，按answer_num分类
    public function unanswerAction(){
        // var_dump($_SESSION);
        $this->indexAction("where answer_num='0'");       
    }
}